class TodosController < ApplicationController
  before_filter :check_authorization
  layout :layout
  
  def layout
    if @project
     "project"
    else
     "company"
    end
  end
  # GET /todos
  # GET /todos.xml
  def index
    @act = params[:act]
    @todo = Todo.new

    if @project
      @todos = Todo.find(:all,:conditions=>["project_id = ?",params[:project_id]],:order=>'id DESC')
    else
      @todos = []
      @todos = @cur_user.company.todos if @cur_user.company.projects.size > 0
    end
    respond_to do |format|
      format.html # index.rhtml
      format.xml  { render :xml => @todos.to_xml }
    end
  end

  # GET /todos/1
  # GET /todos/1.xml
  def show
    @todo = Todo.find(params[:id])

    respond_to do |format|
      format.html # show.rhtml
      format.xml  { render :xml => @todo.to_xml }
    end
  end

  # GET /todos/new
  def new
    @todo = Todo.new
  end

  # GET /todos/1;edit
  def edit_it
    @todo = Todo.find(params[:id])
    render :partial => 'edit',:locals=>{:project_id=>@todo.project.id}
  end

  # POST /todos
  # POST /todos.xml
  def create
    @todo = Todo.new(params[:todo])
    @todo.project = Project.find(params[:project_id])

    respond_to do |format|
      if @todo.save
        flash[:notice] = 'Todo was successfully created.'
        format.html { redirect_to todos_url(@todo.project) }
        format.xml  { head :created, :location => todo_url(@todo) }
      else
        format.html { render :action => "new" }
        format.xml  { render :xml => @todo.errors.to_xml }
      end
    end
  end

  # PUT /todos/1
  # PUT /todos/1.xml
  def update
    @todo = Todo.find(params[:id])

    respond_to do |format|
      if @todo.update_attributes(params[:todo])
        flash[:notice] = 'Todo was successfully updated.'
        format.html { redirect_to todos_url(@todo.project) }
        format.xml  { head :ok }
      else
        format.html { render :action => "edit" }
        format.xml  { render :xml => @todo.errors.to_xml }
      end
    end
  end

  # DELETE /todos/1
  # DELETE /todos/1.xml
  def destroy
    @todo = Todo.find(params[:id])
    @todo.destroy

    respond_to do |format|
      format.html { redirect_to todos_url }
      format.xml  { head :ok }
    end
  end
  
  # add todo item
  def add_todo_item
   todo = Todo.find(params[:todo_item][:todo_id])
   todo_item = TodoItem.new(params[:todo_item])
   if params[:from] == "today" 
     todo_item.start_at = Time.now
   else
     todo_item.start_at = params[:from_days].to_i.days.since(todo.started_at)
   end
   if params[:to] == "user_choice"
     todo_item.due_at = params[:to_days].to_i.days.since(todo.started_at)
   end

   if todo_item.save
      todo.reload
     render :update do |page|
       page.replace_html 'todo_item_list_' + todo.id.to_s,:partial=>'todo_item_list',:locals=>{:todo_items=>todo.todo_items}
       page.replace_html 'add_todo_item_suite_' + todo.id.to_s,:partial=>'add_todo_item_suite',:locals=>{:todo=>todo}
       page.show  'add_todo_item_form_' + todo.id.to_s
       page.hide 'add_todo_item_label_' + todo.id.to_s
     end
   end
  end
  # finish a todo item
  def finish_todo_item
   todo = Todo.find(params[:todo_item][:todo_id])
   todo_item = TodoItem.new(params[:todo_item])
   if todo_item.save
     render :update do |page|
       page.replace_html 'todo_item_list_' + todo.id.to_s,:partial=>'todo_item_list',:locals=>{:todo_items=>todo.todo_items}
       page.replace_html 'add_todo_item_suite_' + todo.id.to_s,:partial=>'add_todo_item_suite',:locals=>{:todo=>todo}
       page.show  'add_todo_item_form_' + todo.id.to_s
       page.hide 'add_todo_item_label_' + todo.id.to_s
     end
    end
  end
  def mark_finish
    todo_item = TodoItem.find(params[:todo_item_id])
    if todo_item.finished_at.to_i > 0
     todo_item.finished_at = 0
    else
     todo_item.finished_at = Time.now
    end
    todo = todo_item.todo
    if todo_item.save
     render :update do  |page|
       page.replace_html "todo_item_list_" + todo.id.to_s, :partial=>'todo_item_list',:locals=>{:todo_items=>todo.todo_items}
       page.replace_html "finished_todo_item_list_" + todo.id.to_s, :partial=>'finished_todo_item_list',:locals=>{:todo_items=>todo.finished_todo_items}
       page.visual_effect :highlight, 'todo_item_' + todo_item.id.to_s, :duration => 4.5
     end
    end
  end
  def delete_todo_item
    todo_item = TodoItem.find(params[:id])
    todo = todo_item.todo
    if todo_item.destroy
    render :update do |page|
       page.replace_html "todo_item_list_" + todo.id.to_s, :partial=>'todo_item_list',:locals=>{:todo_items=>todo.todo_items}
      page.replace_html "finished_todo_item_list_" + todo.id.to_s, :partial=>'finished_todo_item_list',:locals=>{:todo_items=>todo.finished_todo_items}
    end
    end
  end
end
